//
//  IMapView.h
//  MapIMPDemo
//
//  Created by CheungZhiHeng on 4/24/18.
//  Copyright © 2018 CheungZhiHeng. All rights reserved.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <CoreLocation/CoreLocation.h>

@class PolyObject;

typedef NS_ENUM(NSUInteger, LocationType) {
    ///单次定位
    LocationTypeOnce,
    ///持续定位
    LocationTypeNormal,
    ///后台定位
    LocationTypeBackground,
};

typedef void(^LocationResultBlock)(CGFloat lat, CGFloat lng, NSString *address, NSString *district, NSString *error, NSString *adcode, NSString *name, NSString *city);
typedef void(^LocationPermissionOffBlock)(void);
typedef void(^MapDidScrollBlock)(CGFloat centerLat, CGFloat centerLng);
typedef void(^MapTipsSearchResultBlock)(NSArray *infos);

@protocol IMapView <NSObject>

/*!
 *  @brief 获取地图
 */
- (UIView *)getMapView;

/*!
 *  @brief 根据定位中心点经纬度缩放(默认水平、垂直跨度350米)
 */
- (void)setCenterMap;

/*!
 *  @brief 根据中心点经纬度缩放
 *
 *  @param  lat                   设置地图中心点纬度
 *  @param  lng                   设施地图中心点经度
 *  @param  latitudinalMeters     垂直跨度
 *  @param  longitudinalMeters    水平跨度
 */
- (void)setCenterMapWithLat:(CGFloat)lat
                        lng:(CGFloat)lng
          latitudinalMeters:(CGFloat)latitudinalMeters
         longitudinalMeters:(CGFloat)longitudinalMeters;

/*!
 *  @brief 设置地图是否能够移动
 *
 *  @param  scroll                是否能够移动(YES:支持，NO:不支持)
 */
- (void)setScrollMap:(BOOL)scroll;

/*!
 *  @brief 根据中心点画圆
 *
 *  @param  centerLat             设置中心点纬度
 *  @param  centerLng             设施中心点经度
 *  @param  radius                圆半径大小
 *  @param  bgColor               圆填充颜色
 */
- (void)showCircleWithCenterLat:(CGFloat)centerLat
                      centerLng:(CGFloat)centerLng
                         radius:(CGFloat)radius
                backgroundColor:(UIColor *)bgColor;

/*!
 *  @brief 根据坐标显示点
 *
 *  @param  imageName             自定义点图片名称
 *  @param  lat                   设施中心点纬度
 *  @param  lng                   设施中心点经度
 *  @param  needRemove            是否清除所有已添加的点
 *  @param  reuseIndetifier       重用标识符
 */
- (void)showAnnotationWithImageName:(NSString *)imageName
                                lat:(CGFloat)lat
                                lng:(CGFloat)lng
           needRemoveAllAnnotations:(BOOL)needRemove
          annotationReuseIndetifier:(NSString *)reuseIndetifier;

/*!
 *  @brief 判断一个点是否在圆内
 *
 *  @param  centerLat             设置中心点纬度
 *  @param  centerLng             设施中心点经度
 *  @param  lat                   需要判断点的纬度
 *  @param  lng                   需要判断点的经度
 *  @param  radius                圆半径大小
 */
- (BOOL)locationIsContainsWithCenterLat:(CGFloat)centerLat
                              centerLng:(CGFloat)centerLng
                                    lat:(CGFloat)lat
                                    lng:(CGFloat)lng
                                 radius:(CGFloat)radius;

/*!
*  @brief 添加线条展示
*
*  @param  polys             线条数组，参数：[polys:[lat, lng], color, type:line dash]
*/
- (void)showPoly:(NSArray<PolyObject *> *)polys;

/*!
 *  @brief 清除地图信息
 */
- (void)clearMapView;

- (void)showPolygon:(CLLocationCoordinate2D *)coord count:(NSInteger)count fillColor:(UIColor *)fillColor storkColor:(UIColor *)storkColor width:(CGFloat)width coverAlpha:(CGFloat)alpha;

- (BOOL)isContainLat:(CGFloat)lat lng:(CGFloat)lng;

/*!
 *  @brief 地图移动完成
 *
 *  @param  block                 完成block
 */
- (void)setMapDidScroll:(MapDidScrollBlock)block;

@end

@protocol IMapFoundation <NSObject>

/*!
 *  @brief 初始化地图配置
 */
- (void)initMapInfoWithAPIKey:(NSString *)key;

/*!
 *  @brief 根据类型开始定位
 *
 *  @param  type                  定位类型(持续定位，单次定位)
 *  @param  callback              只有type为LocationTypeOnce生效
 */
- (void)startLocationWithType:(LocationType)type
               finishCallback:(LocationResultBlock)callback
        permissionOffCallback:(LocationPermissionOffBlock)permissionCallback;

/*!
 *  @brief 停止定位
 */
- (void)stopLocation;

/*!
 *  @brief 根据经纬度解析位置信息
 *
 *  @param  lat                   纬度
 *  @param  lng                   经度
 */
- (void)searchAddressWithLat:(CGFloat)lat lng:(CGFloat)lng;

/*!
 *  @brief 设置定位结果block回调
 *
 *  @param  block                 定位结果回调
 */
- (void)setResultBlock:(LocationResultBlock)block;

/*!
 *  @brief 根据关键字查询地址信息
 *
 *  @param  key                    关键字
 */
- (void)searchTipsWithKey:(NSString *)key;

/*!
 *  @brief 设置关键字搜索结果block回调
 *
 *  @param  block                  定位结果回调
 */
- (void)setTipsResultBlock:(MapTipsSearchResultBlock)block;

@end
